package day5.phenomenons;

/**
 * 加锁方式三：给不同类下的非静态方法加锁
 * 加锁失败
 */
public class Demo3 {

    // 定义一个被操作的数
    static int r = 0;
    // 定义操作的数
    static final int COUNT = 1000_0000;

    static class Add extends Thread {
        @Override
        public synchronized void run() { // 该锁指向的是Add的对象
            for (int i = 0; i < COUNT; i++) {
                r++;
            }
        }
    }

    static class Sub extends Thread {
        @Override
        public synchronized void run() { // 该锁指向的是Sub的对象
            for (int i = 0; i < COUNT; i++) {
                r--;
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {
        Thread add = new Add();
        add.start();
        Thread sub = new Sub();
        sub.start();

        // 等待结束
        add.join();
        sub.join();

        System.out.println(r);
    }
}
